package com.hsj.core.utils;

import com.hsj.core.entity.Bean;
import com.hsj.core.entity.Property;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * 主要用于解析xml
 * @author:Teacher黄
 * @date:Created at 2019/05/12
 */
public class ParseXmlUtil {


    /**
     * 解析xml的方法
     * @param path : 对应xml的路径
     * @return
     */
    public static List<Bean> parse(String path){
        if (path == null) {
            return null;
        }
        // 返回的beanList
        List<Bean> beanList = new ArrayList<>();
        // 获取输入流
        InputStream inputStream = ParseXmlUtil.class.getClassLoader().getResourceAsStream(path);
        // 解析器
        SAXReader reader = new SAXReader();

        try {
            // 读入输入流
            Document read = reader.read(inputStream);
            // 获取根元素
            Element rootElement = read.getRootElement();
            // 获取所有的bean标签
            List<Element> beans = rootElement.elements("bean");
            // 遍历
            for (Element bean : beans) {
                Bean objBean = new Bean();
                // 获取name属性
                objBean.setName(bean.attributeValue("name"));
                // 获取class属性
                objBean.setClassName(bean.attributeValue("class"));
                // 读取下面的property标签
                List<Element> properties = bean.elements("property");
                // 遍历
                List<Property> propertyList = new ArrayList<>();
                for (Element property : properties) {
                    Property objProperty = new Property();
                    // 获取name属性
                    objProperty.setName(property.attributeValue("name"));
                    // 获取对应的值
                    objProperty.setValue(property.getTextTrim());
                    // 获取ref
                    objProperty.setRef(property.attributeValue("ref"));
                    // 加入list
                    propertyList.add(objProperty);
                }
                // 设置property
                objBean.setPropertyList(propertyList);
                // 加入list
                beanList.add(objBean);
            }


        } catch (DocumentException e) {
            e.printStackTrace();
        }
        return beanList;
    }



}
